home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / cat / wdwmanag.d < prev    next >
Text File  |  1997-10-26  |  34KB  |  739 lines

  1. DEFINITION MODULE WdwManager;
  2.  
  3. (*$Z+*)
  4.  
  5. FROM SYSTEM     IMPORT LOC, ADDRESS;
  6.  
  7. FROM GrafBase   IMPORT Rectangle, LongRect;
  8.  
  9. CONST   
  10.         UP      = 0;
  11.         DOWN    = 1;
  12.         RIGHT   = 0;
  13.         LEFT    = 1;
  14.         
  15.         HDRFIRST    = 0;
  16.         HDRNEXT     = 1;
  17.  
  18. TYPE
  19.  
  20.         handleMessProc          = PROCEDURE (ADDRESS, BITSET) : BOOLEAN;
  21.                                   (* pBuff, kstate *)
  22.         handleGlobalKeyProc     = PROCEDURE (INTEGER, CHAR, CHAR, BITSET) : BOOLEAN;
  23.                                   (* taste, key, scan, kstate *)
  24.         handleButtonProc        = PROCEDURE (INTEGER, INTEGER, ADDRESS, INTEGER, INTEGER, BITSET, BITSET, INTEGER) : BOOLEAN;
  25.                                   (* wdw, vdiH, special, mx, my, kstate, buttons, clicks *)
  26.         handleKeyProc           = PROCEDURE (INTEGER, INTEGER, ADDRESS, INTEGER, CHAR, CHAR, BITSET) : BOOLEAN;
  27.                                   (* wdw, vdiH, special, taste, key, scan, kstate *)
  28.         handleTimerProc         = PROCEDURE (INTEGER, INTEGER, ADDRESS) : BOOLEAN;
  29.                                   (* wdw, vdiH, special *)
  30.         handleRectProc          = PROCEDURE (INTEGER, INTEGER, ADDRESS, INTEGER,
  31.                                              INTEGER, INTEGER) : BOOLEAN;
  32.                                   (* wdw, vdiH, special, which, moX, moY *)
  33.         getRectEventProc        = PROCEDURE (INTEGER, INTEGER, ADDRESS, VAR Rectangle, VAR INTEGER): BOOLEAN;
  34.                                   (* wdw, vdiH, special, rect, type
  35.                                    * type = leave oder enter 
  36.                                    *)
  37.         snapProc                = PROCEDURE (INTEGER, INTEGER, ADDRESS, VAR Rectangle);
  38.                                   (* wdw, vdiH, special, wdwRect
  39.                                    * Es wird die Workarea des Fensters bergeben
  40.                                    *)
  41.         closeProc               = PROCEDURE (INTEGER, INTEGER, ADDRESS, BOOLEAN) : BOOLEAN;
  42.                                   (* wdw, vdiH, special, force
  43.                                    * Gibt zurck, ob das Fenster komplett geschlossen werden soll 
  44.                                    * oder nicht!
  45.                                    * Bei force = TRUE wird das Fenster danach definitiv geschlossen,
  46.                                    * d.h. dann wird das Ergebnis ignoriert! Wird aber nur am Programm-
  47.                                    * ende so aufgerufen, wenn das Fenster noch nicht geschlossen wurde.
  48.                                    *)
  49.         topProc                 = PROCEDURE (INTEGER, INTEGER, ADDRESS) : BOOLEAN;
  50.                                   (* wdw, vdiH, special
  51.                                    * Wird aufgerufen, wenn das Fenster getoppt wurde.
  52.                                    * gibt zurck, ob das fenster getoppt werden soll oder 
  53.                                    * nicht.
  54.                                    *)
  55.         untopProc               = PROCEDURE (INTEGER, INTEGER, ADDRESS);
  56.                                   (* wdw, vdiH, special
  57.                                    * Wird aufgerufen, um den Clienten darber zu informieren,
  58.                                    * das sein Fenster nicht mehr das topWindow ist
  59.                                    *)
  60.         drawProc                = PROCEDURE (INTEGER, INTEGER, ADDRESS, Rectangle);
  61.                                   (* wdw, vdiH, special, clip
  62.                                    * Clipping ist schon gesetzt
  63.                                    *)
  64.         updateProc              = PROCEDURE (INTEGER, INTEGER, ADDRESS, BOOLEAN);
  65.                                   (* wdw, vdiH, special, begin
  66.                                    *)
  67.         setWorkProc             = PROCEDURE (INTEGER, INTEGER, ADDRESS, LongRect, BOOLEAN);
  68.                                   (* wdw, vdiH, special, document, slidedJN
  69.                                    *)
  70.         getRectProc             = PROCEDURE (INTEGER, INTEGER, ADDRESS, VAR Rectangle);
  71.                                   (* wdw, vdiH, special, wdwWork
  72.                                    *)
  73.         hideProc                = PROCEDURE (INTEGER, INTEGER, ADDRESS, BOOLEAN);
  74.                                   (* wdwH, vdiH, special, hide. 
  75.                                    * Wird aufgerufen, wenn das Fenster nur versteckt 
  76.                                    * wird (mit wind_close) oder wenn es ikonifiziert
  77.                                    * wird. hide = TRUE: Fenster wird versteckt. 
  78.                                    *)
  79.  
  80.         handleNewTopProc        = PROCEDURE (INTEGER);
  81.                                   (* globale Prozedur, wird aufgerufen, wenn ein neues Fenster 
  82.                                    * zum Topwindow wird. Bekommt das Handle des neuen TopWindows 
  83.                                    * bergeben
  84.                                    *)
  85.         handleEventProc         = PROCEDURE (INTEGER);
  86.                                   (* globale Prozedur, wird jedesmal nach der Abarbeitung der Events 
  87.                                    * aufgerufen. Bekommt als Parameter das WindowHandle des TopWindows
  88.                                    * bergeben.
  89.                                    *)
  90.         getExtsProc             = PROCEDURE (INTEGER, ADDRESS, VAR ARRAY OF CHAR);
  91.                                   (* wdw, special, Extension Data 
  92.                                    * Das Fenster muž in data seine Extension Daten fr 
  93.                                    * Drag & Drop zurckliefern 
  94.                                    *) 
  95.         acceptDataProc          = PROCEDURE (INTEGER, ADDRESS, ADDRESS): BOOLEAN;
  96.                                   (* wdw, special, hdr
  97.                                    * Beim Fenster wird angefragt, ob es die Daten
  98.                                    * mit dem Header akzeptiert 
  99.                                    *)
  100.         writeDataProc           = PROCEDURE (INTEGER, ADDRESS, VAR ADDRESS, LONGCARD);
  101.                                   (* wdw, special, data, dataLen
  102.                                    * Dem Fenster werden die Daten in data geschickt
  103.                                    * Dieses hat die dann entsprechend zu behandeln
  104.                                    *)
  105.         readDataProc            = PROCEDURE (INTEGER, ADDRESS, VAR ADDRESS);
  106.                                   (* wdw, special, data
  107.                                    * Das Fenster wird dazu aufgefordert, die 
  108.                                    * Adresse der Daten zu liefern 
  109.                                    *)
  110.         getHeaderProc           = PROCEDURE (INTEGER, ADDRESS, INTEGER, 
  111.                                              VAR ARRAY OF CHAR, 
  112.                                              VAR ARRAY OF CHAR, 
  113.                                              VAR LONGCARD): BOOLEAN;
  114.                                    (* wdw, special, mode, ext, name, size
  115.                                     * Das Fenster soll die Headerdaten liefern
  116.                                     * mode ist entweder HDRFIRST oder HDRNEXT
  117.                                     * Falls keine Daten mehr da sind, soll FALSE
  118.                                     * zurckgegeben werden
  119.                                     *)
  120.  
  121.         queueTestProc           = PROCEDURE (INTEGER) : BOOLEAN;
  122.                                   (* wdw wird bergeben
  123.                                    *)
  124. TYPE
  125.         ptrWdwSlot;
  126.  
  127. (* ---------------------------------------------------------------------*)
  128. (* Variablen                                                            *)
  129.  
  130. VAR  theTopWindow : INTEGER;     (* Enth„lt immer die Nummer des Topwindows
  131.                                   * Wird in HandleEvent upgedatet
  132.                                   *)
  133.      ownTopWindow : INTEGER;     (* Enth„lt immer die Nummer des Topwindows
  134.                                   * von CAT, also des eigenen, h”chsten 
  135.                                   * Fensters. Muž nicht mit theTopWindow 
  136.                                   * identisch sein!
  137.                                   *)
  138.  
  139.      handleNewTop : handleNewTopProc;    (* Siehe Kommentar zu Typ *)
  140.      handlePostEvent : handleEventProc;    (* Siehe Kommentar zu Typ *)
  141.      
  142.      deskSize    : Rectangle;    (* Die Ausmaže des Desktops *)
  143.      
  144. (* ---------------------------------------------------------------------*)
  145.  
  146. (* Ein paar allgemeine Rechteck- und Clip-Funktionen *)
  147.  
  148. PROCEDURE SetClip (hdl : INTEGER; clip : ARRAY OF LOC; relative : BOOLEAN);
  149. (* Setzt das Clipping-Rechteck fr die workstation. 
  150.  * Wenn relative = TRUE ist, wird das Rechteck noch umgewandelt in
  151.  * ein absolutes Rechteck ( (x, y, w, h) ==> (x, y, x2, y2))
  152.  *)
  153.  
  154. PROCEDURE RectList (wdw: INTEGER; flag: INTEGER; 
  155.                     VAR work: Rectangle): BOOLEAN;
  156. (* Liefert die Rechteckliste fr das Fenster.
  157.  * Flag = 0: Erstes Rechteck liefern.
  158.  * Flag = 1: N„chstes Rechteck liefern.
  159.  * In work wird das Rechteck zurckgegeben.
  160.  * TRUE = Es ist noch ein Rechteck vorhanden
  161.  *)
  162.  
  163. PROCEDURE RectListActive (): BOOLEAN; 
  164. (* Gibt zurck, ob gerade eine Rechteckliste abgearbeitet wird
  165.  *)
  166.  
  167. (* ---------------------------------------------------------------------*)
  168.  
  169. PROCEDURE CreateWindow (fullSize : Rectangle; VAR currSize : Rectangle; 
  170.                         wdwParts : BITSET; REF info, titel : ARRAY OF CHAR;
  171.                         env : ADDRESS; supportIconify: BOOLEAN;
  172.                         openWorkstation: BOOLEAN;
  173.                         VAR wdwHandle, vdiHandle : INTEGER): BOOLEAN;
  174. (* Erzeugt ein Fenster, das mit Default-Prozeduren behandelt wird. 
  175.  * Weitere Einstellungen muž man danach vornehmen 
  176.  *)
  177.  
  178. PROCEDURE SetWindowDraw (wdw: INTEGER; draw: drawProc): BOOLEAN;
  179. (* Setzt die Zeichenprozedur fr ein Fenster. False: Fenster nicht gefunden
  180.  *)
  181.  
  182. PROCEDURE SetWindowSnap (wdw: INTEGER; snap: snapProc): BOOLEAN;
  183. (* Setzt die Snapprozedur fr ein Fenster. Diese wird dann
  184.  * bei jedem Sizen und einmal direkt mit den aktuellen Werten
  185.  * aufgerufen. False: Fenster nicht gefunden
  186.  *)
  187.  
  188. PROCEDURE SetWindowButton (wdw: INTEGER; button: handleButtonProc): BOOLEAN;
  189. (* Setzt den Buttonhandler fr ein Fenster. False: Fenster nicht gefunden
  190.  *)
  191.  
  192. PROCEDURE SetWindowKey (wdw: INTEGER; key: handleKeyProc): BOOLEAN;
  193. (* Setzt den Keyhandler fr ein Fenster. False: Fenster nicht gefunden
  194.  *)
  195.  
  196. PROCEDURE SetWindowTimer (wdw: INTEGER; timer: handleTimerProc): BOOLEAN;
  197. (* Setzt den Timerhandler fr ein Fenster. False: Fenster nicht gefunden
  198.  *)
  199.  
  200. PROCEDURE SetWindowRectProc (wdw: INTEGER; rect: handleRectProc): BOOLEAN;
  201. (* Setzt den Rechteckhandler fr ein Fenster. 
  202.  * False: Fenster nicht gefunden
  203.  *)
  204.  
  205. PROCEDURE SetWindowClose (wdw: INTEGER; close: closeProc): BOOLEAN;
  206. (* Setzt den Closehandler fr ein Fenster. False: Fenster nicht gefunden
  207.  *)
  208.  
  209. PROCEDURE SetWindowTop (wdw: INTEGER; top: topProc): BOOLEAN;
  210. (* Setzt den Tophandler fr ein Fenster. False: Fenster nicht gefunden
  211.  *)
  212.  
  213. PROCEDURE SetWindowUntop (wdw: INTEGER; untop: untopProc): BOOLEAN;
  214. (* Setzt den Untophandler fr ein Fenster. False: Fenster nicht gefunden
  215.  *)
  216.  
  217. PROCEDURE SetWindowUpdate (wdw: INTEGER; update: updateProc): BOOLEAN;
  218. (* Setzt den Updatehandler fr ein Fenster. False: Fenster nicht gefunden
  219.  *)
  220.  
  221. PROCEDURE SetWindowSwork (wdw: INTEGER; setWdw: setWorkProc): BOOLEAN;
  222. (* Setzt den Handler fr Dokument„nderungen im Fenster. False: Fenster nicht gefunden
  223.  *)
  224.  
  225. PROCEDURE SetWindowGetScroll (wdw: INTEGER; getScroll: getRectProc): BOOLEAN;
  226. (* Setzt den GetScrollRect-Handler fr ein Fenster. False: Fenster nicht gefunden
  227.  *)
  228.  
  229. PROCEDURE SetWindowHide (wdw: INTEGER; hide: hideProc): BOOLEAN;
  230. (* Setzt den Hidehandler fr ein Fenster. False: Fenster nicht gefunden
  231.  *)
  232.  
  233. PROCEDURE SetWindowPixOff (wdw: INTEGER; pixelOffset: INTEGER): BOOLEAN;
  234. (* Setzt den linken Offset fr ein Fenster. False: Fenster nicht gefunden
  235.  *)
  236.  
  237. PROCEDURE SetWindowMode (wdw: INTEGER; onlyThisTop: BOOLEAN): BOOLEAN;
  238. (* Setzt den Modus fr ein Fenster. False: Fenster nicht gefunden oder
  239.  * es ist schon ein anderes Fenster als einziges das Topwindow. 
  240.  *)
  241.  
  242. PROCEDURE SetWindowDial (wdw: INTEGER; dial: ADDRESS): BOOLEAN;
  243. (* Setzt die Dialogadresse fr das Fenster. False: Fenster nicht gefunden
  244.  *)
  245.  
  246. PROCEDURE SetWindowMenu (wdw: INTEGER; menu: ADDRESS): BOOLEAN;
  247. (* Setzt die Menuadresse fr das Fenster. False: Fenster nicht gefunden
  248.  *)
  249.  
  250. PROCEDURE OpenWindow (button : handleButtonProc; key  : handleKeyProc; timer : handleTimerProc;
  251.                       fullSize : Rectangle; VAR currSize : Rectangle; wdwParts : BITSET; 
  252.                       wdwSnap : BOOLEAN; REF info, titel : ARRAY OF CHAR;
  253.                       snapP : snapProc; close : closeProc; draw : drawProc; top : topProc;
  254.                       untop : untopProc; update : updateProc; setWdw : setWorkProc; 
  255.                       getScroll : getRectProc; hide : hideProc;
  256.                       pixelOffset : INTEGER; env : ADDRESS;
  257.                       onlyThisTop : BOOLEAN; showIt : BOOLEAN; 
  258.                       supportIconify: BOOLEAN; openWorkstation: BOOLEAN;
  259.                       VAR wdwHandle, vdiHandle : INTEGER): BOOLEAN;
  260. (* Erl„uterung der Parameter:
  261.  * button: Diese Prozedur wird dann aufgerufen, wenn ein Button-Event aufgetreten ist 
  262.  *         und dieser im Workbereich des Fensters lag. Es ist auch m”glich,
  263.  *         handleButtonProc (NIL) zu bergeben.
  264.  * key:    Diese Prozedur wird dann aufgerufen, wenn das Fenster das TopWindow ist
  265.  *         und ein Keyboard-Event aufgetreten ist. Es ist auch m”glich, handleKeyProc (NIL)
  266.  *         zu bergeben, dann wird diese nicht aufgerufen.
  267.  * timer:  Diese Prozedur wird aufgerufen, wenn ein Timer-Event aufgetreten ist. 
  268.  *         Man kann auch handleTimerProc (NIL) bergeben, dann wird nichts ausgefhrt.
  269.  * fullSize,
  270.  * currSize : Die Auženrechtecke. fullSize ist die maximale Gr”že des Fensters, currSize
  271.  *            die Gr”že, mit der das Fenster ge”ffnet werden soll.
  272.  * wdwParts : Ein Set der Window-Elemente (MagicAES.D)
  273.  * wdwSnap  : Wenn TRUE bergeben wird, wird beim Ver„ndern der Gr”že und der Position des 
  274.  *            Fensters die Prozedur snapP aufgerufen. Diese muž dann installiert sein!
  275.  * info,
  276.  * titel    : Die Strings, die als Titelzeile bzw. als Infozeile angezeigt werden sollen.
  277.  * snapP: Diese Prozedur wird aufgerufen, wenn wdwSnap = TRUE ist und das Fenster in der Gr”že
  278.  *        ver„ndert wurde oder verschoben wurde. Nur, wenn wdwSnap = FALSE ist, darf man auch 
  279.  *        einen NIL-Pointer bergeben.
  280.  * close: Diese Prozedur wird aufgerufen, wenn ein CloseEvent aufgetreten ist oder CloseWindow
  281.  *        aufgerufen wurde. Nur, wenn close TRUE zurckgibt, wird das Fenster auch geschlossen.
  282.  *        CloseWindow darf von close NICHT aufgerufen werden. Diese Prozedur muž vorhanden sein,
  283.  *        ein NIL-Pointer ist nicht zul„ssig!
  284.  * top: Diese Prozedur wird aufgerufen, wenn das Fenster getoppt werden soll. Nur, wenn TRUE zurck-
  285.  *      gegeben wird, wird das Fenster auch getoppt. Diese Prozedur muž vorhanden sein,
  286.  *      ein NIL-Pointer ist nicht zul„ssig!
  287.  * untop:  Diese Prozedur wird aufgerufen, wenn das Fenster enttopped wurde. Es ist auch m”glich,
  288.  *         NIL zu bergeben.
  289.  * update: Diese Prozedur wird aufgerufen, wenn Ausgaben in das Fenster gemacht werden sollen. Vor 
  290.  *         den Ausgaben wird update (..., MagicAES.BEG_UPDATE) aufgerufen, am Ende der Ausgaben
  291.  *         update (..., MagicAES.END_UPDATE). Diese Prozedur muž vorhanden sein,
  292.  *         ein NIL-Pointer ist nicht zul„ssig!
  293.  * setWdw: Diese Prozedur wird aufgerufen, wenn sich intern die Position des virtuellen Fensters
  294.  *         auf dem Dokument ver„ndert hat. Wenn das durch Scrollen geschah, dann ist slided TRUE.
  295.  *         Diese Prozedur muž vorhanden sein, ein NIL-Pointer ist nicht zul„ssig!
  296.  * getScroll: Diese Prozedur muž das Rechteck zurckliefern, in dem das Fenster gescrollt werden darf.
  297.  *            Es wird die aktuelle Arbeitsfl„che des Fensters (WorkArea) bergeben und es muž
  298.  *            eine Fl„che zurckgegeben werden, in der das Scrollen erlaubt ist. 
  299.  *            Es ist auch m”glich, die Arbeitsfl„che ohne Einschr„nkungen zurckzugeben.
  300.  *            Es wird keine šberprfung gemacht, ob das Rechteck vernnftige Werte enth„lt,
  301.  *            man sollte also darauf achten, daž man keine unsinnigen Werte zurckgibt.
  302.  *            Diese Prozedur muž vorhanden sein, ein NIL-Pointer ist nicht zul„ssig!
  303.  * hide:   Diese Prozedur wird aufgerufen, wenn das Fenster entweder mittels HideWindow
  304.  *         versteckt wird oder wenn es iconifiziert wird. Die Prozedur sollte gesetzt
  305.  *         sein, muž es aber nicht. 
  306.  * pixelOffset: Um diesen Offset wird der Fensterinhalt beim Zeichnen versetzt gezeichnet.
  307.  *              Dieser muž den internen Scrollroutinen bekannt sein, da es sont Probleme 
  308.  *              gibt.
  309.  * env: Ein beliebiger Parameter, der an die Serviceroutinen zurck bergeben wird. Kann auch
  310.  *      ein Pointer auf eine Struktur sein.
  311.  * onlyThisTop: Wenn dieser Parameter TRUE ist, dann wird nur dieses Fenster getoppt 
  312.  *              und kein anderes. Ntzlich fr modale Fensterdialoge.
  313.  * showIt:      Wenn dieser Parameter TRUE ist, dann wird das Fenster auch direkt ge”ffnet.
  314.  *              Ansonsten muž extra noch ShowWindow aufgerufen werden.
  315.  * Rckgabewerte:
  316.  * wdwHandle: Das Handle des Fensters. Nur gltig, falls TRUE zurckgegeben wird.
  317.  * vdiHandle: Das Handle der zugeordneten Workstation. Nur gltig, falls TRUE zurckgegeben wird.
  318.  *)
  319.  
  320. PROCEDURE ShowWindow (wdw: INTEGER): BOOLEAN;
  321. (* Ein vorhandenes, aber nicht ge”ffnetes Fenster wird ge”ffnet.
  322.  * Geht nicht mit iconifizierten Windows! Die hideProc fr das Fenster
  323.  * wird aufgerufen.
  324.  * FALSE: Window nicht vorhanden oder ist schon offen.
  325.  *)
  326.  
  327. PROCEDURE HideWindow (wdw: INTEGER): BOOLEAN;
  328. (* Ein offenes Fenster wird geschlossen, aber nicht gel”scht. 
  329.  * Die hideProc fr das Fenster wird aufgerufen. 
  330.  * Das Window wird dadurch nicht iconifiziert!
  331.  * FALSE: Window nicht vorhanden oder ist schon geschlossen oder ikonifiziert.
  332.  *)
  333.  
  334. PROCEDURE SendCloseWindow (wdw : INTEGER);
  335. (* Sendet eine Schliežnachricht an das Fenster 
  336.  * Geht sowohl fr eigene als auch fr fremde Fenster, wenn
  337.  * diese in der Fensterliste vorhanden sind oder ein TOS
  338.  * l„uft, das die Abfrage der ID zum Fenster erlaubt.
  339.  *)
  340.  
  341. PROCEDURE CloseWindow (wdw : INTEGER; force : BOOLEAN) : BOOLEAN;
  342. (* Schliežt Fenster und entfernt die Handler aus der Liste 
  343.  * Bei force = TRUE wird das Fenster dann garantiert geschlossen!
  344.  * Falls das Fenster nicht vom Modul verwaltet wird, aber trotzdem 
  345.  * in der WindowQueue enthalten ist, dann wird an das Fenster
  346.  * eine Close-Nachricht geschickt.
  347.  *)
  348.  
  349. PROCEDURE CloseAllWindows (force : BOOLEAN): BOOLEAN;
  350. (* Schliežt alle Fenster, die dem Modul bekannt sind. 
  351.  * Die Fenster werden alle ber CloseWindow geschlossen,
  352.  * und falls ein CloseWindow FALSE zurckliefert, dann
  353.  * wird der Returnwert zurckgegeben und abgebrochen.
  354.  *)
  355.  
  356. PROCEDURE FullWindow (wdw : INTEGER);
  357. (* Tut so, als ob das Fenster eine Fulled-Nachricht erhalten h„tte.
  358.  * Falls das Fenster nicht vom Modul verwaltet wird, aber trotzdem 
  359.  * in der WindowQueue enthalten ist, dann wird an das Fenster
  360.  * eine Fulled-Nachricht geschickt.
  361.  *)
  362.  
  363. PROCEDURE TopWindow (wdw : INTEGER);
  364. (* Tut so, als ob das Fenster eine Topped-Nachricht erhalten h„tte.
  365.  * Falls das Fenster nicht vom Modul verwaltet wird, aber trotzdem 
  366.  * in der WindowQueue enthalten ist, dann wird an das Fenster
  367.  * eine Topped-Nachricht geschickt.
  368.  *)
  369.  
  370. PROCEDURE HandleEvent ( VAR event : BITSET; VAR pbuff : ARRAY OF LOC; buts, kstate : BITSET; key, scan : CHAR; 
  371.                         taste, mx, my, clicks : INTEGER) : BOOLEAN;
  372. (* Verteilt die events, falls n”tig. Wenn behandelt, wird TRUE zurckgegeben,
  373.  * andernfalls FALSE
  374.  *)
  375.  
  376. PROCEDURE HandlePendingEvents();
  377. (* Arbeitet aufgelaufene Message-Events ab
  378.  *)
  379.  
  380. PROCEDURE GetTopWindow (VAR wdw, handle : INTEGER);
  381. (* Liefert das Handle des Top-Fensters (direkt ber AES)
  382.  * und zus„tzlich noch das VDI-Handle der Workstation des Fensters.
  383.  *)
  384.  
  385. PROCEDURE IsOwnTop (): BOOLEAN;
  386. (* Liefert zurck, ob ein eigenes Fenster, das vom Windowmanager verwaltet
  387.  * wird, das Topwindow ist
  388.  *)
  389.  
  390. PROCEDURE WindowIsIcon (wdw: INTEGER) : BOOLEAN;
  391. (* Liefert TRUE, wenn das Window vorhanden und iconifiziert ist 
  392.  *)
  393.  
  394. PROCEDURE ModalWindowTop (): BOOLEAN;
  395. (* Liefert TRUE, wenn das Topwindow ein eigenes und modal ist 
  396.  *)
  397.  
  398. PROCEDURE WindowIsShaded (wdw: INTEGER) : BOOLEAN;
  399. (* Liefert TRUE, wenn das Window vorhanden und mittels WindowShade 
  400.  * geshadet ist (oder aužerhalb des Bildschirms liegt)
  401.  *)
  402.  
  403. PROCEDURE WindowIsFullable (wdw: INTEGER) : BOOLEAN;
  404. (* Liefert TRUE, wenn das Window vorhanden und fullbar ist,
  405.  * d.h. es hat einen Sizer oder es ist nur in der Queue drin.
  406.  *)
  407.  
  408. PROCEDURE WindowIsCloseable (wdw: INTEGER) : BOOLEAN;
  409. (* Liefert TRUE, wenn das Window vorhanden und schliežbar ist.
  410.  * Schliežbar heižt, es hat einen Closer oder es ist in der Windowqueue
  411.  *)
  412.  
  413. PROCEDURE SetWindowIcon (icon : ADDRESS);
  414. (* Setzt das Icon, das in iconifizierten Fenstern gezeichnet wird. 
  415.  * icon ist die Adresse eines Objektbaumes;
  416.  * Bei icon = NIL wird nichts gezeichnet.
  417.  *)
  418.  
  419. PROCEDURE ClickInWindow (x, y: INTEGER; VAR wdw: INTEGER);
  420. (* Liefert das Windowhandle zurck, falls sich an der Position 
  421.  * x,y ein Fenster befindet (muž nicht dem Modul bekannt sein!)
  422.  *)
  423.  
  424. PROCEDURE ScrollInWdw (wdw: INTEGER; 
  425.                        VAR source: Rectangle; 
  426.                        dir: INTEGER; 
  427.                        amount: INTEGER);
  428. (* Diese Funktion erm”glicht das Scrollen innerhalb eines Dokumentes
  429.  * unter Bercksichtigung der Rechteckliste und mit automatischem Redraw 
  430.  * der neu zu zeichnenden Stellen nach dem Scrollen
  431.  *)
  432.  
  433. (* Das Konzept des virtuellen Dokuments:
  434.  
  435.  
  436. Intern innerhalb des Moduls wird fr jedes Fenster ein virtuelles
  437. Dokument (VD) verwaltet. Der aktuelle Fensterausschnitt ist immer
  438. nur ein Ausschnitt aus diesem virtuellen Dokument. Intern wird das 
  439. ungef„hr wie folgt behandelt:
  440.  
  441.  
  442.             x-Position des Dokumentes
  443.                 |
  444.                 v
  445.        <---------------- Breite des Dokuments ---------->
  446.        +------------------------------------------------+ ^
  447.        |                                                | |
  448.        |                                                | |
  449.        |                                                | |
  450.        |                                                | |
  451.        |                                                | |
  452.  ----> |        +---------------------+                 | | 
  453. y-Pos. |        |                     |                 | |
  454.        |        | aktueller           |                 | |
  455.        |        | Ausschnitt          |                 | |
  456.        |        |                     |                 | |
  457.        |        |                     |                 | |
  458.        |        |                     |                 | |
  459.        |        |                     |                 | |
  460.        |        +---------------------+                 | H”he 
  461.        |                                                | des 
  462.        |                                                | Dokuments
  463.        |                                                | |
  464.        |                                                | |
  465.        |                                                | |
  466.        |                                                | |
  467.        |                                                | |
  468.        |                                                | |
  469.        |                                                | |
  470.        |                                                | |
  471.        |                                                | |
  472.        |                                                | |
  473.        |                                                | |
  474.        |                                                | |
  475.        |                                                | |
  476.        |                                                | |
  477.        |                                                | |
  478.        |                                                | |
  479.        |                                                | |
  480.        |                                                | |
  481.        +------------------------------------------------+ V
  482.  
  483. Damit die Verwaltung dieses VD auch funktioniert, mssen einige 
  484. Parameter gesetzt sein. Die einzelnen Werte fr das Dokument werden
  485. in sogenannten Einheiten verwaltet. Dabei kann man fr x und y Aufl”sung
  486. unterschiedliche Einheiten angeben. Diese Einheiten sind der xFactor und
  487. der yFactor. So ist es zum Beispiel m”glich, die H”he in Textzeilen anzugeben,
  488. aber die Breite in Pixeln. In dem Fall w„re der yFactor (H”he) = die H”he einer
  489. Textzeile, und der xFactor (Breite) = 1 (Default). 
  490. Ebenso muž man die H”he und Breite einer Seite in Einheiten fr das Bl„ttern
  491. angeben, und man muž auch noch angeben, um wieviele Einheiten beim
  492. einzelnen Scrollen gescrollt werden soll.
  493. In obigem Beispiel w„re dann bei einem normalen Textbildschirm die
  494. H”he 20 Zeilen und die Breite 600 Pixel. Und beim Scrollen gibt man dann
  495. fr minScrollH eine 1 an (eine Zeile), aber da man nicht Pixelweise seitw„rts
  496. scrollen will, dort z.B. eine 8 (fr einen 8 Pixel breiten Zeichensatz). 
  497. *)
  498.  
  499.  
  500. (* Prozeduren zur Verwaltung und zum Handling des 
  501.  * virtuellen Dokuments.
  502.  *)
  503.  
  504. PROCEDURE SetDocumentParms (wdw : INTEGER; xFac, yFac: LONGINT);
  505. (* Setzt die Parameter fr die Ausschnittsberechnung 
  506.  *)
  507.  
  508. PROCEDURE SetScrollParms (wdw : INTEGER; pageW, pageH, minScrollW, minScrollH : LONGINT);
  509. (* Setzt die Parameter fr das Bl„ttern im Dokument 
  510.  *)
  511.  
  512. PROCEDURE GetScrollParms (wdw : INTEGER; VAR pageW, pageH, minScrollW, minScrollH : LONGINT);
  513. (* Erfragt die Parameter fr das Bl„ttern im Dokument 
  514.  *)
  515.  
  516. PROCEDURE SetNewDocument (wdw : INTEGER; doc : LongRect; redraw: BOOLEAN);
  517. (* Setzt die aktuellen Dokument-Parameter ohne automatsiches Scrollen
  518.  * Wenn redraw = TRUE, wird ein Redraw ber das komplette Fenster ausgel”st.
  519.  *)
  520.  
  521. PROCEDURE SetWdwDocument (wdw : INTEGER; doc : LongRect);
  522. (* Setzt die aktuellen Dokument-Parameter.
  523.  * Es wird automatisch so gescrollt, das der aktuelle Ausschnitt 
  524.  * sichtbar ist.
  525.  *)
  526.  
  527. PROCEDURE GetWdwDocument (wdw : INTEGER; VAR doc : LongRect);
  528. (* Erfragt die aktuellen Dokument-Parameter
  529.  *)
  530.  
  531. (* Bl„ttern im dargestellten Dokument
  532.  *) 
  533. PROCEDURE PageUp (wdw : INTEGER);
  534. (* Es wird um pageH Einheiten hochgebl„ttert.
  535.  *)
  536.  
  537. PROCEDURE PageDown (wdw : INTEGER);
  538. (* Es wird um pageH Einheiten nach unten gebl„ttert.
  539.  *)
  540.  
  541. PROCEDURE PageLeft (wdw : INTEGER);
  542. (* Es wird um pageW Einheiten nach links gebl„ttert.
  543.  *)
  544.  
  545. PROCEDURE PageRight (wdw : INTEGER);
  546. (* Es wird um pageW Einheiten nach rechts gebl„ttert.
  547.  *)
  548.  
  549. PROCEDURE ScrollUp     (wdw : INTEGER; lines : INTEGER);
  550. (* Es wird um lines * minScrollH Einheiten nach oben gebl„ttert.
  551. *)
  552.  
  553. PROCEDURE ScrollDown   (wdw : INTEGER; lines : INTEGER);
  554. (* Es wird um lines * minScrollH Einheiten nach unten gebl„ttert.
  555. *)
  556.  
  557. PROCEDURE ScrollLeft   (wdw : INTEGER; amount : INTEGER);
  558. (* Es wird um amount * minScrollW Einheiten nach links gebl„ttert.
  559. *)
  560.  
  561. PROCEDURE ScrollRight  (wdw : INTEGER; amount : INTEGER);
  562. (* Es wird um amount * minScrollW Einheiten nach links gebl„ttert.
  563. *)
  564.  
  565. PROCEDURE WdwComps (wdw : INTEGER) : BITSET;
  566. (* Liefert die Window-Elemente zurck 
  567.  *)
  568.  
  569. PROCEDURE SnapWdw (wdw : INTEGER);
  570. (* Ruft die Snap-Funktion fr das Fenster auf
  571.  *)
  572.  
  573. PROCEDURE SetWdwSize (wdw : INTEGER; rect : Rectangle);
  574. (* Setzt neue aktuelle Aužengr”že fr das Fenster
  575.  *)
  576.  
  577. PROCEDURE GetWdwSize (wdw : INTEGER; VAR rect : Rectangle);
  578. (* Erfragt aktuelle Aužengr”že fr das Fenster
  579.  *)
  580.  
  581. PROCEDURE SetWdwWork (wdw : INTEGER; rect : Rectangle);
  582. (* Setzt neue aktuelle Arbeitsfl„chengr”že fr das Fenster
  583.  *)
  584.  
  585. PROCEDURE GetWdwWork (wdw : INTEGER; VAR rect : Rectangle);
  586. (* Erfragt aktuelle Arbeitsfl„chengr”že fr das Fenster
  587.  *)
  588.  
  589. PROCEDURE RedrawWdw (wdw : INTEGER; frame : Rectangle);
  590. (* Zeichnet das Fenster im Bereich Frame neu, beachtet
  591.  * Rechteckliste und ruft indirekt die drawProc auf
  592.  *)
  593.  
  594. PROCEDURE FullRedrawWdw (wdw : INTEGER);
  595. (* Zeichnet das Fenster komplett neu, beachtet
  596.  * Rechteckliste und ruft indirekt die drawProc auf
  597.  *)
  598.  
  599. PROCEDURE SetWdwInfoline (wdw : INTEGER; info : ARRAY OF CHAR);
  600. (* Setzt die Infozeile fr das Fenster
  601.  *)
  602.  
  603. PROCEDURE SetWdwTitle (wdw : INTEGER; title : ARRAY OF CHAR);
  604. (* Setzt den Fenstertitel 
  605.  *)
  606.  
  607. (*------- Menu & Keyboard -----------------------------------------------------*)
  608.  
  609. PROCEDURE InstallGlobalMenu (tree: ADDRESS; menuP: handleMessProc);
  610. (* Gibt dem Modul die Adresse des Menubaums bekannt. Damit kann dieser dann disablet
  611.  * werden, wenn ein modaler Dialog aufgerufen wird.
  612.  * Aužerdem wird eine Callback-Funktion installiert, die bei Menu-Events aufgerufen
  613.  * wird.
  614.  * Es wird nur ein Menu und eine Callbackfunktion verwendet, ein Deinstall
  615.  * ist daher nicht notwendig, ein erneuter Aufruf berschreibt die
  616.  * eingestellten Werte
  617.  *)
  618.  
  619.  
  620. PROCEDURE DisableMenu (menu: ADDRESS; disable : BOOLEAN);
  621. (* Schaltet einen Menubaum auf enabled oder disabled 
  622.  * menu = NIL: ein installiertes globales Menu wird disabled oder enabled
  623.  *)
  624.  
  625. PROCEDURE InstallGlobalKeyProc (key  : handleGlobalKeyProc);
  626. (* Installiert einen globalen Keyhandler, der dann aufgerufen wird, wenn
  627.  * die Taste von keinem Fenster behandelt wurde.
  628.  * Wenn Shift und eine andere Sondertaste gedrckt wird, dann wird 
  629.  * diese Callback-Funktion vor den Fenstern aufgerufen
  630.  *)
  631.  
  632. (*------- QueueModul ----------------------------------------------------------*)
  633.  
  634. PROCEDURE NewWindowIsTop(handle, apId : INTEGER);
  635. (* Dem Modul wird mitgeteilt, das ein neues Fenster getopt 
  636.  * wurde. Nur n”tig bei nicht vom Modul verwalteten Fenstern
  637.  *)
  638.  
  639. PROCEDURE WindowIsClosed(handle : INTEGER);
  640. (* Dem Modul wird mitgeteilt, das ein Fenster geschlossen 
  641.  * wurde. Nur n”tig bei nicht vom Modul verwalteten Fenstern.
  642.  *)
  643.  
  644. PROCEDURE TopNextWindow();
  645. (* Das n„chste Window wird getoppt.
  646.  *)
  647.  
  648. PROCEDURE TopNextPossible() : BOOLEAN;
  649. (* Es wird zurckgeliefert, ob es m”glich ist,
  650.  * ein anderes Fenster zu toppen.
  651.  *)
  652.  
  653. PROCEDURE GetSecondWdw (VAR wdw : INTEGER): BOOLEAN;
  654. (* Liefert zweitoberstes Fenster zurck.
  655.  * Geht nur ber Queue, benutzt nicht die Liste.
  656.  * Gibt TRUE zurck, falls erfolgreich.
  657.  *)
  658.  
  659. PROCEDURE GetOwnTopWindow (VAR wdw: INTEGER);
  660. (* Liefert das Topwindow der Applikation zurck *)
  661.  
  662. PROCEDURE IsInQueue (wdw : INTEGER) : BOOLEAN;
  663. (* Liefert TRUE zurck, wenn das Fenster wdw in 
  664.  * der verwalteten Queue ist.
  665.  *)
  666.  
  667. PROCEDURE GetApId (wdw : INTEGER; VAR apId : INTEGER) : BOOLEAN;
  668. (* Liefert TRUE zurck, wenn das Fenster bekannt ist, und die 
  669.  * Applikation-ID der Applikation zum Fenster.
  670.  * Funktioniert nur fr fremde Fenster
  671.  *)
  672.  
  673. PROCEDURE FindSpecialTop (hdlTest: queueTestProc): INTEGER;
  674. (* Sucht nach einem bestimmten Fenster von Anfang der Queue
  675.  * bis zum Ende. Bricht ab, wenn proc TRUE liefert.
  676.  * Gibt das Fensterhandle zurck oder -1
  677.  *)
  678.  
  679. CONST   STACKED = 0;
  680.         BYSIDE  = 1;
  681.         OVERLAP = 2;
  682.         TILED   = 3;
  683.         
  684.         
  685. PROCEDURE ArrangeWindows (mode : INTEGER);
  686. (* Ordnet die Fenster an. Es ist einer der 
  687.  * vorher definierten Anordnungsmodi m”glich.
  688.  *)
  689.  
  690. (* Tempor„re Funktion, um Support von Iconify von MTOS 1.07 Beta einzuschalten
  691.  *)
  692. PROCEDURE EnableIconify (enable: BOOLEAN);
  693.  
  694. (* Drag & Drop Support fr MTOS *)
  695.  
  696. PROCEDURE WdwInstallDDClient (wdw: INTEGER; 
  697.                               getExts : getExtsProc;
  698.                               acceptData : acceptDataProc;
  699.                               writeData  : writeDataProc);
  700. (* Ein Fenster installiert fr sich Drag & Drop. Damit untersttzt
  701.  * es automatisch Drag & Drop. 
  702.  *)
  703.  
  704. PROCEDURE WdwInstallDDServer (wdw: INTEGER; 
  705.                               getHeader : getHeaderProc;
  706.                               readData  : readDataProc);
  707. (* Ein Fenster installiert sich als Server fr Drag & Drop. 
  708.  * Danach kann es dann die Prozedur WdwDDServe benutzen, 
  709.  * die Drag & Drop durchfhrt.
  710.  *)
  711.  
  712. PROCEDURE WdwDoesDragDrop (wdw: INTEGER): BOOLEAN;
  713. (* TRUE: Das Fenster untersttzt Drag & Drop 
  714.  *)
  715.  
  716. PROCEDURE WdwDDGetExts (wdw: INTEGER; VAR exts: ARRAY OF CHAR);
  717. (* Liefert fr das Wdw die untersttzen Extensions zurck 
  718.  *)
  719.  
  720. PROCEDURE WdwDDAcceptData (wdw: INTEGER; hdr: ADDRESS): BOOLEAN;
  721. (* Falls das Window die Daten nach dem Header akzeptiert, dann wird
  722.  * TRUE zurckgegeben
  723.  *)
  724.  
  725. PROCEDURE WdwDDWriteData (wdw: INTEGER; VAR data: ADDRESS; dataLen: LONGCARD);
  726. (* Die Daten werden an das Fenster bergeben 
  727.  *)
  728.  
  729. PROCEDURE WdwDDServe (wdw: INTEGER; mx, my: INTEGER; kstate: BITSET): BOOLEAN;
  730. (* Initialisiert Drag & Drop als Server. wdw ist das Source-Fenster(!!),
  731.  * vorher muž sich das Fenster als Server angemeldet haben. Dann wird
  732.  * ber die angemeldeten Prozeduren versucht, Drag & Drop durchzufhren
  733.  *)
  734.  
  735. PROCEDURE SetMagicPCKeyTranslation (setIt: BOOLEAN);
  736. (* Schaltet die Tastenbersetzung fr MagicPC ein *)
  737.  
  738. END WdwManager.
  739.